package com.snack.system.mapper;

import com.snack.system.domain.TsGoodsType;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商品类型Mapper接口
 * 
 * @author snack
 * @date 2022-09-18
 */
public interface TsGoodsTypeMapper 
{

    /**
     * 查询商品类型列表
     *
     * @param goodsType 商品类型
     * @return 商品类型集合
     */
    public List<TsGoodsType> selectList(TsGoodsType goodsType);

    /**
     * 查询商品类型
     * 
     * @param goodsTypeId 商品类型主键
     * @return 商品类型
     */
    public TsGoodsType selectTypeById(Long goodsTypeId);

    /**
     * 查询商品类型
     *
     * @param goodsTypeId 商品类型主键
     * @return 系统类型
     */
    public TsGoodsType selectSimpleById(Long goodsTypeId);

    /**
     * 根据ID查询所有子查询商品类型
     *
     * @param goodsTypeId 商品类型主键
     * @return 商品类型列表
     */
    public List<TsGoodsType> selectChildrenById(Long goodsTypeId);

    /**
     * 根据ID查询所有子商品类型（正常状态）
     *
     * @param goodsTypeId 商品类型主键
     * @return 子商品类型数
     */
    public int selectNormalChildrenById(Long goodsTypeId);

    /**
     * 校验资料商品类型名称是否唯一
     *
     * @param typeName 商品类型名称
     * @param parentId 父部门ID
     * @return 结果
     */
    public TsGoodsType checkNameUnique(@Param("typeName") String typeName, @Param("parentId") Long parentId);


    /**
     * 根据父级id查询
     * @param parentId 父级id
     * @return
     */
    public List<TsGoodsType> selectByParentId(Long parentId);

    /**
     * 是否存在子节点
     *
     * @param goodsTypeId 商品类型ID
     * @return 结果
     */
    public int hasChildById(Long goodsTypeId);

    /**
     * 查询商品类型是否存在数据
     *
     * @param goodsTypeId 商品类型ID
     * @return 结果
     */
    public int checkExistData(Long goodsTypeId);

    /**
     * 新增商品类型
     * 
     * @param goodsType 商品类型
     * @return 结果
     */
    public int insertTsGoodsType(TsGoodsType goodsType);

    /**
     * 修改商品类型
     * 
     * @param goodsType 商品类型
     * @return 结果
     */
    public int updateTsGoodsType(TsGoodsType goodsType);

    /**
     * 修改所有商品类型正常状态
     *
     * @param goodsTypeIds 商品类型ID组
     * @return 结果
     */
    public int updateStatusNormal(Long[] goodsTypeIds);

    /**
     * 修改子元素关系
     *
     * @param goodsTypes 子元素
     * @return 结果
     */
    public int updateChildren(@Param("goodsTypes") List<TsGoodsType> goodsTypes);

    /**
     * 更改顺序
     * @param goodsTypes
     * @return
     */
    public int updateOrderNum(@Param("goodsTypes") List<TsGoodsType> goodsTypes);

    /**
     * 删除商品类型
     * 
     * @param goodsTypeId 商品类型主键
     * @return 结果
     */
    public int deleteByTypeId(Long goodsTypeId);

    /**
     * 批量删除商品类型
     * 
     * @param goodsTypeIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteByTypeIds(Long[] goodsTypeIds);
}
